package com.luckcoder.relax.games.domain.bo;

import com.luckcoder.relax.games.domain.RelaxUserGameSettings;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;

/**
 * 用户游戏设置业务对象 relax_user_game_settings
 *
 * @author zhanghao
 * @date 2025-09-11
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = RelaxUserGameSettings.class, reverseConvertGenerate = false)
public class RelaxUserGameSettingsBo extends BaseEntity {

    /**
     * 设置ID
     */
    @NotNull(message = "设置ID不能为空", groups = { EditGroup.class })
    private Long settingId;

    /**
     * 用户ID
     */
    @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long userId;

    /**
     * 游戏编码
     */
    @NotBlank(message = "游戏编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String gameCode;

    /**
     * 游戏时间（秒），0表示无限模式
     */
    @NotNull(message = "游戏时间不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 0, message = "游戏时间不能小于0")
    @Max(value = 3600, message = "游戏时间不能超过3600秒")
    private Integer gameTime;

    /**
     * 表情生成间隔（毫秒）
     */
    @NotNull(message = "表情生成间隔不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 100, message = "表情生成间隔不能小于100毫秒")
    @Max(value = 2000, message = "表情生成间隔不能超过2000毫秒")
    private Integer emojiSpeed;

    /**
     * 屏幕最大表情数
     */
    @NotNull(message = "屏幕最大表情数不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 1, message = "屏幕最大表情数不能小于1")
    @Max(value = 20, message = "屏幕最大表情数不能超过20")
    private Integer maxEmojis;

    /**
     * 表情最小大小（rpx）
     */
    @Min(value = 50, message = "表情最小大小不能小于50rpx")
    @Max(value = 200, message = "表情最小大小不能超过200rpx")
    private Integer emojiSizeMin;

    /**
     * 表情最大大小（rpx）
     */
    @Min(value = 50, message = "表情最大大小不能小于50rpx")
    @Max(value = 200, message = "表情最大大小不能超过200rpx")
    private Integer emojiSizeMax;

    /**
     * 自动消失时间（秒），0表示不自动消失
     */
    @Min(value = 0, message = "自动消失时间不能小于0")
    @Max(value = 60, message = "自动消失时间不能超过60秒")
    private Integer autoPopTime;
}